package main

import (
	"bufio"
	"flag"
	"fmt"
	"os"
	"strings"
)

type ArgsOption struct {
	Name        string            // 名称
	UseTemplate string            // 使用模版
	Overwrite   string            // 文件覆盖模式
	Vars        map[string]string // 自定义变量
}

func GetArgsOptions() *ArgsOption {
	opt := &ArgsOption{
		Vars: make(map[string]string),
	}

	var varStr string // 临时变量，用于接收逗号分隔的字符串

	flag.StringVar(&opt.Name, "name", "", "模块名称")
	flag.StringVar(&opt.UseTemplate, "use", "", "使用模版名称")
	flag.StringVar(&opt.Overwrite, "overwrite", "ask", "文件覆盖模式 (all/ask)")
	flag.StringVar(&varStr, "var", "", "自定义变量，格式为 key1=value1,key2=value2")

	flag.Parse()

	// 处理 Var 字段（逗号分隔）
	if varStr != "" {
		pairs := strings.Split(varStr, ",")
		for _, pair := range pairs {
			kv := strings.SplitN(pair, "=", 2)
			if len(kv) == 2 {
				opt.Vars[kv[0]] = kv[1]
			}
		}
	}

	checkName(opt)
	checkTemplateName(opt)

	return opt
}

func checkName(opt *ArgsOption) {
	if len(opt.Name) >= 1 {
		return
	}

	reader := bufio.NewReader(os.Stdin)
	for {
		fmt.Print("请输入需要创建的模块名称: ")
		input, _ := reader.ReadString('\n')

		name := strings.TrimSpace(input)
		if len(name) == 0 {
			fmt.Println("错误: 模块名称不能为空")
			continue
		}

		opt.Name = name
		return
	}
}

func checkTemplateName(opt *ArgsOption) {
	if len(opt.UseTemplate) >= 1 {
		return
	}

	reader := bufio.NewReader(os.Stdin)

	fmt.Print("请确认使用的模版(默认使用default): ")
	input, _ := reader.ReadString('\n')

	name := strings.TrimSpace(input)
	if len(name) == 0 {
		name = "default"
	}

	opt.UseTemplate = name
}
